/*
 * @Author: your name
 * @Date: 2020-12-08 14:41:00
 * @LastEditTime: 2020-12-09 17:41:25
 * @LastEditors: Please set LastEditors
 * @Description: 页面请求相关
 * @FilePath: \gitee-h5-template\js\zz\request\index.js
 */
(function() {
    /* 请求对象 */
    var service;
    /* Promise */
    var supportedPromise = typeof Promise;
    if(supportedPromise==="function"){
        console.log("---supportedPromise---");
        // --- 创建axios对象
        service = axios.create({
            /* 一些配置参数 */
        });
        //
        //console.log("---service---",service);
        //console.log("---service.defaults.baseURL---",service.defaults.baseURL);
        service.interceptors.request.use(
            function(config){
                /* 修改请求参数??? */
                return config;
            },
            function(error){
                console.warn("---请求还未发送就报错了-_-!!!");
                return Promise.reject(error);
            }
        )
        service.interceptors.response.use(
            function(response){
                /* 请求成功 */
                return response.data;
            },
            function(error){
                /* 请求失败 */
                return Promise.reject(error)
            }
        )
    }else{
        console.log("---not___supportedPromise---");
        // $.ajax
        /* $.ajaxSetup({
            beforeSend(XHR){
                alert("zzzzz");
                console.log("---XHR---",XHR);
            }
        }); */
    }
    /* 请求方式 */
    var postReqFns = {
        "function":function(
            url,
            data,
            options
        ){
            //
            service.defaults.baseURL = zzRequest.ajaxUrl;
            //
            var url = url || "";
            var data = data || {};
            var options = options || {};
            // --- 发送的请求数据
            var reqData = $.extend(
                true,
                {
                    
                },
                {
                    url:url,
                    method:"POST",
                    data:data
                },
                options
            );
            //console.log("---reqData---",reqData);
            // --- 显示加载
            var vantToast = null;
            if(reqData.showLoading){
                vantToast = vant.Toast.loading({
                    message: reqData.loadingTxt || "发送请求...",
                    forbidClick: true,
                    duration:0
                });
            }
            //
            return new Promise(function(resolve,reject){
                service(reqData).then(function(data){
                    //console.log("---请求成功---",data);
                    vantToast && vantToast.clear(true);
                    resolve(data);
                }).catch(function(error){
                    //console.log("---请求失败---",error);
                    vantToast && vantToast.clear(true);
                    reject(error);
                })
            });
        },
        "undefined":function(
            url,
            data,
            options
        ){
            //
            var url = url || "";
            var data = data || {};
            var options = options || {};
            // --- 要发送的请求数据
            var reqData = $.extend(
                true, 
                {
                    a:1
                }, 
                {
                    data: data
                }
            );
            // --- 显示加载
            var vantToast = null;
            if(options.showLoading){
                vantToast = vant.Toast.loading({
                    message: options.loadingTxt || "发送请求...",
                    forbidClick: true,
                    duration:0
                });
            }
            // --- 一些配置项
            var reqOptions = $.extend(
                true, 
                {
                    
                },
                {
                    dataType: "json",
                    headers: {
                        "Content-Type": "application/json", // application/x-www-form-urlencoded  application/json
                        "charset": "utf-8"
                    }
                }, 
                options
            );
            //
            return $.Deferred(function(defer) {
                $.ajax(
                    $.extend(
                        true, 
                        {
                            url: zzRequest.ajaxUrl + url,
                            type: "POST",
                            data: reqData,
                            contentType:reqOptions.headers["Content-Type"]+";"+reqOptions.headers["charset"]
                        },
                        reqOptions, 
                        {
                            // --- 发送请求之前
                            beforeSend:function(XHR){
                                //console.log("---XHR---",XHR);
                                console.log("---options---",this);
                            },
                            // --- 请求完成
                            complete:function(){
                                vantToast && vantToast.clear(true);
                            },
                            // --- 对返回的数据进行处理
                            dataFilter:function(data,type){
                                //console.log("---data---",typeof data);
                                //console.log("---type---",type);
                                return data;
                            },
                            success: function(data) {
                                console.log("---请求成功---",data);
                                defer.resolve(data);
                            },
                            error: function(error) {
                                console.log("---请求失败---",error);
                                defer.reject(error);
                            }
                        }
                    )
                );
            }).promise();

        }
    };
    /*  */
    window.zzRequest = {
        /* 请求地址 */
        ajaxUrl: "https://zhhyc.cn/car",
        /**
         * @description: post请求
         * @param {*
         *  url
         *  data
         *  options
         * }
         * @return {*
         *  Promise or $.Deferred
         * }
         */
        post(
            url,
            data,
            options
        ){
            return postReqFns[supportedPromise].apply(null,arguments);
        }
    };
})();